/****************************************************************************

	COPYRIGHT(C) MAXSI SOFTWARE, JONAS 'SORTIE' TERMANSEN 2008, 2009, 2010

    This file is part of Maxsi Engine.

    Maxsi Engine is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    Maxsi Engine is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with Maxsi Engine. If not, see <http://www.gnu.org/licenses/>.

	*/ #include "MaxsiEngineContributors.h" /*

	If you modify this file, please enter your name below and provide contact
	information in MaxsiEngineContributors.h. For more information please see
	MaxsiEngineContributors.h.
	
	Contributors to this file:

	- Jonas 'Sortie' Termansen
	- [your name here]

	MaxsiEngine.dll
	A linkable version of Maxsi Engine

	MaxsiComplex.h
	IMAGINARY FUNCTIONS!

****************************************************************************/

#ifndef MaxsiComplex_H
#define MaxsiComplex_H

namespace MaxsiEngine
{
	STRUCTLINK ComplexDouble
	{
		double Real;
		double Imaginary;

		ComplexDouble();
		ComplexDouble(double Reality);
		ComplexDouble(double Reality, double Imagination);

		__forceinline	bool				operator==	(const ComplexDouble& Oprand);
		__forceinline	bool				operator!=	(const ComplexDouble& Oprand);
		__forceinline	ComplexDouble&		operator=	(const ComplexDouble& Oprand);
		__forceinline	ComplexDouble&		operator-=	(const ComplexDouble& Oprand);
		__forceinline	ComplexDouble&		operator+=	(const ComplexDouble& Oprand);
		__forceinline	ComplexDouble&		operator*=	(const ComplexDouble& Oprand);
		__forceinline	ComplexDouble&		operator/=	(const ComplexDouble& Oprand);
		__forceinline	ComplexDouble&		operator+	(const ComplexDouble& Oprand);
		__forceinline	ComplexDouble&		operator-	(const ComplexDouble& Oprand);
		__forceinline	ComplexDouble&		operator*	(const ComplexDouble& Oprand);
		__forceinline	ComplexDouble&		operator/	(const ComplexDouble& Oprand);
	};

	
	STRUCTLINK ComplexFloat
	{
		float Real;
		float Imaginary;

		ComplexFloat();
		ComplexFloat(float Reality);
		ComplexFloat(float Reality, float Imagination);

		__forceinline	bool				operator==	(const ComplexFloat& Oprand);
		__forceinline	bool				operator!=	(const ComplexFloat& Oprand);
		__forceinline	ComplexFloat&		operator=	(const ComplexFloat& Oprand);
		__forceinline	ComplexFloat&		operator-=	(const ComplexFloat& Oprand);
		__forceinline	ComplexFloat&		operator+=	(const ComplexFloat& Oprand);
		__forceinline	ComplexFloat&		operator*=	(const ComplexFloat& Oprand);
		__forceinline	ComplexFloat&		operator/=	(const ComplexFloat& Oprand);
		__forceinline	ComplexFloat&		operator+	(const ComplexFloat& Oprand);
		__forceinline	ComplexFloat&		operator-	(const ComplexFloat& Oprand);
		__forceinline	ComplexFloat&		operator*	(const ComplexFloat& Oprand);
		__forceinline	ComplexFloat&		operator/	(const ComplexFloat& Oprand);
	};
}

#endif
